import csv
from matplotlib import pyplot as plt
from datetime import datetime

# 实参 含义
# %A 星期的名称,如Monday
# %B 月份名,如January
# %m 用数字表示的月份(01~12)
# %d 用数字表示月份中的一天(01~31 )
# %Y 四位的年份,如2015
# %y 两位的年份,如15
# %H 24小时制的小时数(00~23)
# %I 12小时制的小时数(01~12)
# %p am 或pm
# %M 分钟数(00~59 )
# %S 秒数(00~61)


"""分析csv文件"""


# filename = "sitka_weather_07-2014.csv"
# filename = "sitka_weather_2014.csv"
filename = "death_valley_2014.csv"
with open(filename) as f:
    reader = csv.reader(f)  # 多行
    header_row = next(reader)  # 第一行
    # 遍历
    # 日期和最高气温分别存储在第0 列和第1列。为研究这些数据,我们将处理sitka_weather_07-2014.csv 中的每行数据,并提取其中索引为0和1 的值。
    # for index, column_header in enumerate(header_row):
    #     print(index, column_header)
    #
    dates, highs, lows = [], [], []
    for row in reader:  # 按行遍历 第二行了
        try:
            current_date = datetime.strptime(row[0], "%Y-%m-%d")  # 第一列 日期
            high = int(row[1])  # 最高温度 第二列 转int
            low = int(row[3])  # 最低温度 第四列 转int
        except ValueError:  # 异常捕获
            print(current_date, 'missing data')
        else:
            dates.append(current_date)
            highs.append(high)
            lows.append(low)
    # print(highs)
    # 根据数据绘制图形
    fig = plt.figure(dpi=128, figsize=(15, 6))
    plt.plot(dates, highs, c='red')  # 高温曲线
    plt.plot(dates, lows, c='blue')  # 低温曲线
    plt.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1)  # 填充颜色
    plt.title("Daily high and low temperatures - 2014", fontsize=16)
    plt.xlabel('', fontsize=16)
    fig.autofmt_xdate()  # 调用了fig.autofmt_xdate() 来绘制斜的日期标签,以免它们彼此重叠
    plt.ylabel('Temperature (F)', fontsize=16)
    plt.tick_params(axis='both', which='major', labelsize=16)

    plt.show()

